<?php

class Agenda extends AppModel {
	
	var $belongsTo = array('Convenio','Medico','Paciente','Procedimento','Sala','TipoProcedimento','TipoConfirmacao');
	
	var $actsAs = array('DateFormatter','AjusteFloat');
	
	var $validate = array(
	
        'medico_id' => array(
            'vazio' => array(
                'rule' => 'notEmpty',
                'required' => true,
                'message' => 'Médico deve ser informado!',
                'last' => true
			)
		),	
		
        'data_agenda' => array(
            'vazio' => array(
                'rule' => 'notEmpty',
                'required' => true,
                'message' => 'Data deve ser informada!',
                'last' => true
			)
		),
		
        'horario' => array(
            'vazio' => array(
                'rule' => 'notEmpty',
                'required' => true,
                'message' => 'Horário deve ser informado!',
                'last' => true
			)
		)		

	);	
	

	public function carregar_primeira_vez() {
		return array(
			'N' => 'Não',
			'S' => 'Sim'
		);
	}	

	
	public function carregar_situacao() {
		return array(
			1 => 'Livre',
			2 => 'Agendado',
			3 => 'Aguardando',			
			4 => 'Atendido',
			5 => 'Cancelado',
			6 => 'Não compareceu',
			7 => 'Remarcar',
			8 => 'Remarcado',
			9 => 'Desmarcado',
			10 => 'Desistiu',
			11 => 'Bloqueado'
		);
	}

	/*
	public function carregar_situacao_livre() {
		$options = $this->carregar_situacao();
		unset($options[3]);
		unset($options[4]);
		unset($options[5]);
		unset($options[6]);
		unset($options[7]);
		return $options;
	}
	*/
	
	public function carregar_situacao_cancelamento() {
		$options = $this->carregar_situacao();
		unset($options[1]);
		unset($options[2]);
		unset($options[3]);
		unset($options[4]);
		unset($options[6]);
		unset($options[8]);
		unset($options[9]);
		unset($options[10]);
		unset($options[11]);
		return $options;
	}
	
	public function carregar_situacoes_possiveis($sit) {
		$options = $this->carregar_situacao();
		unset($options[5]); // cancelamento não será através da tela de edição do hoário e todo horário gravado como "cancelado" será excluído
		switch ($sit) {
			case 1:
				unset($options[3]);
				unset($options[4]);
				//unset($options[5]);
				unset($options[6]);
				unset($options[7]);
				unset($options[8]);
				unset($options[9]);
				unset($options[10]);
				break;
			case 2:
				unset($options[1]);
				unset($options[4]);
				unset($options[8]);
				break;
			case 3:
				unset($options[1]);
				unset($options[2]);
				unset($options[6]);
				unset($options[8]);
				break;
			case 4:
				unset($options[1]);
				unset($options[2]);
				unset($options[3]);
				//unset($options[5]);
				unset($options[6]);
				unset($options[7]);
				unset($options[8]);
				break;
			case 5:
				unset($options[2]);
				unset($options[3]);
				unset($options[4]);
				unset($options[6]);
				unset($options[7]);
				unset($options[8]);
				break;
			case 6:
				unset($options[2]);
				unset($options[3]);
				unset($options[4]);
				//unset($options[5]);
				unset($options[7]);
				unset($options[8]);
				break;
			case 7:
				unset($options[1]);
				unset($options[2]);
				unset($options[3]);
				unset($options[4]);
				//unset($options[5]);
				unset($options[9]);
				unset($options[6]);
				break;
			case 8:
				unset($options[1]);
				unset($options[2]);
				unset($options[3]);
				unset($options[4]);
				//unset($options[5]);
				unset($options[6]);
				unset($options[7]);
				break;
			case 11:
				unset($options[2]);
				unset($options[3]);
				unset($options[4]);
				//unset($options[5]);
				unset($options[6]);
				unset($options[7]);
				unset($options[8]);
				unset($options[9]);
				unset($options[10]);
				break;					
		}
		return $options;
	}
	
	public function carregar_solicita_adiantamento() {
		return array(
			'N' => 'Não',
			'S' => 'Sim (Normal)',
			'U' => 'Sim (Urgente)'
		);
	}
	
	public function carregar_tipo_horario() {
		return array(
			'N' => 'Normal',
			'E' => 'Encaixe',
			'T' => 'Extra'
		);
	}
	
	public function desbloquear_horarios($agenda_id) {
		
		$this->id = $agenda_id;
		$agenda = $this->read(); 
		
		$horarios = $this->find('all', 
			array(
				'conditions' => 
					array(
						'data_agenda' => $this->date_to_us($agenda['Agenda']['data_agenda']),
						'medico_id' => $agenda['Agenda']['medico_id'],
						'horario >' => $agenda['Agenda']['horario']
					),
				'order' => 'Agenda.medico_id, Agenda.data_agenda, Agenda.horario, Agenda.id',
				'limit' => 3
			)
		);

		foreach ($horarios as $horario) {
			
			if ($horario['Agenda']['situacao'] != 11) {
				break;
			}
			
			$obj['Agenda']['id'] 			= $horario['Agenda']['id'];
			$obj['Agenda']['observacoes'] 	= null;
			$obj['Agenda']['situacao'] 		= 1;
			 
			$this->create();
			$this->save($obj, array('callbacks' => false, 'validate' => false));
		}
	}	

	public function descricao_situacao($sit) {
		$options = $this->carregar_situacao();
		return $options[$sit];
	}

	public function descricao_solicita_adiantamento($sit) {
		$options = $this->carregar_solicita_adiantamento();
		return $options[$sit];
	}
		
	/*
	public function get_data_ultimo_atendimento($paciente_id = null, $medico_id = null, $data_agenda = null, $horario = null) {
		
		if (!$paciente_id || !$data_agenda || !$horario) {
			return null;
		}
		
		$data_agenda = $this->date_to_us($data_agenda);
		
		return $this->field('data_agenda', 
			array(
				'Agenda.paciente_id' => $paciente_id,
				'Agenda.medico_id' => $medico_id,  
				'Agenda.data_agenda <=' => $data_agenda, 
				'Agenda.situacao' => 4)
		);
	}
	*/
	
	/**
	 * 
	 * Enter description here ...
	 * @param date $data_inicial
	 * @param date $data_final
	 * @param array $options: formato (array/options); empty (true/false)
	 */
	public function get_medicos_por_data($data_inicial, $data_final, $options = array('formato' => 'options', 'empty' => true, 'texto_empty' => 'Selecione...' )) {

		if (!$data_inicial || !$data_final) {
			return null;
		}
				
		$data_inicial = $this->date_to_us($data_inicial);
		$data_final = $this->date_to_us($data_final);
		
		//$this->Behaviors->load('Containable');
		
		$medicos = $this->find('list', 
			array(
				'fields' => array('Medico.id', 'Medico.nome'),
				'conditions' => array('data_agenda >=' => $data_inicial, 'data_agenda <=' => $data_final),
				'recursive' => 0,
				'order' => 'Medico.nome',
				'group' => array('Medico.id')
			)
		);
		
		if ($options['formato'] == 'options') {
			$retorno = ($options['empty']) ? '<option value="0">' . $options['texto_empty'] . '</option>' : null;
			foreach ($medicos as $id => $nome) {
				$retorno .= "<option value='{$id}'>{$nome}</option>";
			}
			$medicos = $retorno;
		}

		return $medicos; 
	}
	
	public function get_telefones_paciente($id = null) {
		
		$this->Paciente->id = $id;
		$paciente = $this->Paciente->read();
		
		$telefones = null;
		
		if ($paciente['Paciente']['telefone1']) {
			$telefones = $paciente['Paciente']['telefone1'];
			if ($paciente['Paciente']['telefone1_nome']) {
				$telefones .= ' (' . $paciente['Paciente']['telefone1_nome'] . ')';
			}
		}
		
		if ($paciente['Paciente']['telefone2']) {
			$telefones .= ' | ' . $paciente['Paciente']['telefone2'];
			if ($paciente['Paciente']['telefone2_nome']) {
				$telefones .= ' (' . $paciente['Paciente']['telefone2_nome'] . ')';
			}
		}
		
		if ($paciente['Paciente']['celular1']) {
			$telefones .= ' | ' . $paciente['Paciente']['celular1'];
			if ($paciente['Paciente']['celular1_nome']) {
				$telefones .= ' (' . $paciente['Paciente']['celular1_nome'] . ')';
			}
		}
		
		if ($paciente['Paciente']['celular2']) {
			$telefones .= ' | ' . $paciente['Paciente']['celular2'];
			if ($paciente['Paciente']['celular2_nome']) {
				$telefones .= ' (' . $paciente['Paciente']['celular2_nome'] . ')';
			}
		}

		if ($paciente['Paciente']['celular3']) {
			$telefones .= ' | ' . $paciente['Paciente']['celular3'];
			if ($paciente['Paciente']['celular3_nome']) {
				$telefones .= ' (' . $paciente['Paciente']['celular3_nome'] . ')';
			}
		}		

		return $telefones;		
	}
	
	public function persistir($request) {
		
		$this->id = $request['Agenda']['id'];
		$agenda = $this->read();
		
		$this->create();
		
		$situacao_antes = $agenda['Agenda']['situacao'];
		$situacao_depois = $request['Agenda']['situacao'];
		
		if ($situacao_antes == $situacao_depois) {

			$result = $this->save($request);

		} else if (in_array($situacao_depois, array(1, 5, 6, 9))) {

			$request['Agenda']['paciente_id'] 			= null;
			$request['Agenda']['situacao'] 				= 1;
			$request['Agenda']['convenio_id'] 			= null;
			$request['Agenda']['procedimento_id'] 		= null;
			$request['Agenda']['tipo_horario'] 			= 'N';
			$request['Agenda']['observacoes'] 			= null;
			$request['Agenda']['preco_procedimento'] 	= null;
			$request['Agenda']['tipo_confirmacao_id'] 	= null;
			$request['Agenda']['solicita_adiantamento'] = 'N';
			$request['Agenda']['primeira_vez'] 			= null;

			$result = $this->save($request);
			
			$this->desbloquear_horarios($request['Agenda']['id']);
			
		} else if (in_array($situacao_depois, array(8, 10))) {
		
			$result = $this->delete($request['Agenda']['id']);
			
			$this->desbloquear_horarios($request['Agenda']['id']);
			
		} else {
			
			$result = $this->save($request);
		}
		
		return $result;
	}	
	
}